{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "\n",
    "from sklearn.metrics import log_loss\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>...</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "      <th>interest_level</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.5</td>\n",
       "      <td>3</td>\n",
       "      <td>3000</td>\n",
       "      <td>1200.0</td>\n",
       "      <td>750.000000</td>\n",
       "      <td>-1.5</td>\n",
       "      <td>4.5</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>24</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>5465</td>\n",
       "      <td>2732.5</td>\n",
       "      <td>1821.666667</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>12</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>2850</td>\n",
       "      <td>1425.0</td>\n",
       "      <td>1425.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>17</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>3275</td>\n",
       "      <td>1637.5</td>\n",
       "      <td>1637.500000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>18</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.0</td>\n",
       "      <td>4</td>\n",
       "      <td>3350</td>\n",
       "      <td>1675.0</td>\n",
       "      <td>670.000000</td>\n",
       "      <td>-3.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>28</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 228 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   bathrooms  bedrooms  price  price_bathrooms  price_bedrooms  room_diff  \\\n",
       "0        1.5         3   3000           1200.0      750.000000       -1.5   \n",
       "1        1.0         2   5465           2732.5     1821.666667       -1.0   \n",
       "2        1.0         1   2850           1425.0     1425.000000        0.0   \n",
       "3        1.0         1   3275           1637.5     1637.500000        0.0   \n",
       "4        1.0         4   3350           1675.0      670.000000       -3.0   \n",
       "\n",
       "   room_num  Year  Month  Day       ...        walk  walls  war  washer  \\\n",
       "0       4.5  2016      6   24       ...           0      0    0       0   \n",
       "1       3.0  2016      6   12       ...           0      0    0       0   \n",
       "2       2.0  2016      4   17       ...           0      0    0       0   \n",
       "3       2.0  2016      4   18       ...           0      0    0       0   \n",
       "4       5.0  2016      4   28       ...           0      0    1       0   \n",
       "\n",
       "   water  wheelchair  wifi  windows  work  interest_level  \n",
       "0      0           0     0        0     0               1  \n",
       "1      0           0     0        0     0               2  \n",
       "2      0           0     0        0     0               0  \n",
       "3      0           0     0        0     0               2  \n",
       "4      0           0     0        0     0               2  \n",
       "\n",
       "[5 rows x 228 columns]"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# path to where the data lies\n",
    "dpath = './data/'\n",
    "train = pd.read_csv(dpath +\"RentListingInquries_FE_train.csv\")\n",
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 49352 entries, 0 to 49351\n",
      "Columns: 228 entries, bathrooms to interest_level\n",
      "dtypes: float64(9), int64(219)\n",
      "memory usage: 85.8 MB\n"
     ]
    }
   ],
   "source": [
    "train.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>...</th>\n",
       "      <th>virtual</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>2950</td>\n",
       "      <td>1475.000000</td>\n",
       "      <td>1475.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>11</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>2850</td>\n",
       "      <td>1425.000000</td>\n",
       "      <td>950.000000</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>24</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>3758</td>\n",
       "      <td>1879.000000</td>\n",
       "      <td>1879.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>3</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>3300</td>\n",
       "      <td>1650.000000</td>\n",
       "      <td>1100.000000</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>11</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2.0</td>\n",
       "      <td>2</td>\n",
       "      <td>4900</td>\n",
       "      <td>1633.333333</td>\n",
       "      <td>1633.333333</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>12</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 227 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   bathrooms  bedrooms  price  price_bathrooms  price_bedrooms  room_diff  \\\n",
       "0        1.0         1   2950      1475.000000     1475.000000        0.0   \n",
       "1        1.0         2   2850      1425.000000      950.000000       -1.0   \n",
       "2        1.0         1   3758      1879.000000     1879.000000        0.0   \n",
       "3        1.0         2   3300      1650.000000     1100.000000       -1.0   \n",
       "4        2.0         2   4900      1633.333333     1633.333333        0.0   \n",
       "\n",
       "   room_num  Year  Month  Day  ...   virtual  walk  walls  war  washer  water  \\\n",
       "0       2.0  2016      6   11  ...         0     0      0    0       0      0   \n",
       "1       3.0  2016      6   24  ...         0     0      0    1       0      0   \n",
       "2       2.0  2016      6    3  ...         0     0      0    0       0      0   \n",
       "3       3.0  2016      6   11  ...         0     0      0    0       0      0   \n",
       "4       4.0  2016      4   12  ...         0     0      0    1       0      0   \n",
       "\n",
       "   wheelchair  wifi  windows  work  \n",
       "0           0     0        0     0  \n",
       "1           0     0        0     0  \n",
       "2           0     0        0     0  \n",
       "3           1     0        0     0  \n",
       "4           0     0        0     0  \n",
       "\n",
       "[5 rows x 227 columns]"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test = pd.read_csv(dpath +'RentListingInquries_FE_test.csv')\n",
    "test.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 74659 entries, 0 to 74658\n",
      "Columns: 227 entries, bathrooms to work\n",
      "dtypes: float64(9), int64(218)\n",
      "memory usage: 129.3 MB\n"
     ]
    }
   ],
   "source": [
    "test.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1, 2, 0])"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train['interest_level'].unique()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [],
   "source": [
    "y_train = train['interest_level']\n",
    "X_train = train.drop(['interest_level'], axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(49352, 227)"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_train.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [],
   "source": [
    "kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [],
   "source": [
    "#直接调用xgboost内嵌的交叉验证（cv），可对连续的n_estimators参数进行快速交叉验证\n",
    "#而GridSearchCV只能对有限个参数进行交叉验证\n",
    "def modelfit(alg, X_train, y_train, cv_folds=None, early_stopping_rounds=10):\n",
    "    xgb_param = alg.get_xgb_params()\n",
    "    xgb_param['num_class'] = 9\n",
    "    \n",
    "    #直接调用xgboost，而非sklarn的wrapper类\n",
    "    xgtrain = xgb.DMatrix(X_train, label = y_train)\n",
    "        \n",
    "    cvresult = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'], folds =cv_folds,\n",
    "             metrics='mlogloss', early_stopping_rounds=early_stopping_rounds)\n",
    "  \n",
    "    cvresult.to_csv('1_nestimators.csv', index_label = 'n_estimators')\n",
    "    \n",
    "    #最佳参数n_estimators\n",
    "    n_estimators = cvresult.shape[0]\n",
    "    \n",
    "    # 采用交叉验证得到的最佳参数n_estimators，训练模型\n",
    "    alg.set_params(n_estimators = n_estimators)\n",
    "    alg.fit(X_train, y_train, eval_metric='mlogloss')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [],
   "source": [
    "#params = {\"objective\": \"multi:softprob\", \"eval_metric\":\"mlogloss\", \"num_class\": 9}\n",
    "xgb1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=1000,  #数值大没关系，cv会自动返回合适的n_estimators\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel=0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "modelfit(xgb1, X_train, y_train, cv_folds = kfold)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "XGBClassifier(base_score=0.5, booster='gbtree', colsample_bylevel=0.7,\n",
       "       colsample_bytree=0.8, gamma=0, learning_rate=0.1, max_delta_step=0,\n",
       "       max_depth=5, min_child_weight=1, missing=None, n_estimators=267,\n",
       "       n_jobs=1, nthread=None, objective='multi:softprob', random_state=0,\n",
       "       reg_alpha=0, reg_lambda=1, scale_pos_weight=1, seed=3, silent=True,\n",
       "       subsample=0.3)"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/fei/.local/lib/python3.6/site-packages/ipykernel_launcher.py:1: FutureWarning: from_csv is deprecated. Please use read_csv(...) instead. Note that some of the default arguments are different, so please refer to the documentation for from_csv when changing your function calls\n",
      "  \"\"\"Entry point for launching an IPython kernel.\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEXCAYAAABCjVgAAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3XmcHHWd//HXp6fnPjJJZnKThCPchsNw6KIbRBFQAVERFBUX5IerP+9V1/W3uu7q6rq6HigsuhBPWBSPCAqoXCLncIUcHCHkvibHZO6zP78/vjWTzjA90zOZnpqZfj8fj6Krq75d9amu0O+p29wdERERgETcBYiIyPihUBARkT4KBRER6aNQEBGRPgoFERHpo1AQEZE+CgWRNGb2OTP7Ydx1iMRFoTDBmFmFma03s3enDas0s41m9va0YUvM7DYz22tmDWa22sy+bGZTo/GXm1mPmTVH3Toz+2COa19qZptzOY/hGKged/+Ku1+Zo/mtN7PX52LauTBW62uifS+TnUJhgnH3ZuD/AN8ys9po8H8Ade7+SwAzezVwL/BX4Gh3rwbOAbqBE9Im95C7V7h7BfA24D/M7KSxWRIZDjNLxl2D5Al3VzcBO2AZcBOwFNgNzEob9wDw3SE+fznwQL9hjwLvSnt/PrAKaCCEzDFp446JhjVEbc5PG3cesBpoArYAnwLKgTYgBTRH3ZwMy/U94Pbo848Ah2fxfRwN/BHYAzwHXDySeoAvAj+NPrcQcOD9wCZgL3A1cAqwIlr2a9Lmczhwd7Q+dgE/A6qjcT+J5tUWzevTWXzH64HPRPPqAJLR+y3RsjwHnDXAd3EasB0oSBv2VmBF1H8qUAc0AjuAb2b4TpcCmzOMmwL8GKgHNgCfBxLRuALgG9F38BLw4eh7TGaY1nrg9RnGfQBYG63X5b3/ZgAD/gvYGS3HM8DxmdZ33P+/TqQu9gLUjXDFwVRgW/Q/3vvThpcDPcDSIT5/OWmhEP3QNQBHRu+PBFqANwCFwKej/zmLovdrgc9F718X/Q94VPTZbcBr0uo8OerP+COTVscywo/qqdGP4M+Am4f4TDnhR/v90WdOir6XY4dbDwOHwnVACXA20A78BpgBzI1+lP42an9E9H0VA7XA/cC30qZ9wI/fYN9xWvungEOAUuCoaDnnpNU3YGACLwJvSHv/C+CzUf9DwHui/grg9AzTyLi+CIHwW6AyquN54Ipo3NWEH+V50ff9J0YQCtG/q13AydF3+l3g/mjcG4HHgWpCQBwDzB5sfavLrtPuownK3fcS/sIsA36VNmoqYbfg9t4BZvYf0XGFFjP7fFrb06PhTYSthJ8AL0Tj3gnc7u5/dPcu4D8JP0yvBk4n/Jh81d073f1u4Dbg0uizXcCxZlbl7nvd/YlhLt6v3f1Rd+8mhMKJQ7R/M7De3W909253fxK4FXjHKNXzr+7e7u53EX7Eb3L3ne6+BfgLIYRw97XR99Xh7vXAN4G/HWS6g33Hvb7j7pvcvY0Q9sXRshS6+3p3fzHDtG8iWh9mVkn46/mmtO/jCDOrcfdmd394OF+GmRUAlwD/6O5N7r6esGXwnqjJxcC33X1z9O/0q8OZfpp3Aze4+xPu3gH8I/AqM1sYLUMlYQvR3H2Nu29LW76DWd95TaEwQZnZZYS/0P4EfC1t1F7CborZvQPc/dMejiv8mvCXdK+H3b3a3SuBWcBxwFeicXMIuwV6p5Ei/JU6Nxq3KRrWa0M0DsLxifOADWZ2n5m9apiLtz2tv5UQQINZAJwWBVyDmTUQflBmjVI9O9L62wZ4XwFgZjPN7GYz22JmjcBPgZpBpjvYd9xrU9r4tcDHCFszO6N5zckw7Z8DF5lZMXAR8IS7987rCsJWyrNm9piZvXmQGgdSQ9iy2ZA2LH39z0mvu1//cPT/fpoJW5Fzoz9EriHsatxpZtebWVXU9GDXd15TKExAZjaDsD/1A4SDzheb2WsA3L2FsB/+ouFM0913EP66fks0aCvhx7Z3nkbYjbElGneImaX/+5kfjcPdH3P3Cwi7WH4D3NI7m+HUNAybgPuigOvtKtz9g2Ncz1eiab7C3auAywi7Nnr1n99g3/GAn3H3n7v7GdHnnAP/IEhvt5rwg3ou8C5CSPSOe8HdLyV8H18Dfmlm5dkvJrsIf40vSBvWt/4Ju2/mpY07ZBjTTtf/+ykHprP/39l33P2VwLGEkPuHaHim9S1ZUChMTNcAv3H3e6JN5k8DP4j+KiR6/3dm9tkoQDCzecChmSZoZtMJByNXRYNuAd5kZmeZWSHwScLBzgcJodMKfNrMCs1sKSFMbjazIjN7t5lNiXaJNBK2XCD8hT3dzKaM0vfQ6zbgSDN7T1RPoZmdYmbHjHE9lYSDyPvMbC7Rj1SaHcBhae8H+45fxsyOMrPXReu5nf0HyjP5OfBR4LWEYwq907nMzGqjLZOGaHDG6ZhZSXoXtb0F+HJ0OvQC4BOELaPe5fqomc01s2rCwfGhFPabT5Kwu+v9ZnZitMxfAR5x9/XR+j0t+t5aou8jNcT6lmzEfVBD3fA64ELCX1DV/YbfDXw57f1pwO8J/9M3ACuBLwPTo/GXE/ZR9555s5PwP+GMtGm8lXDAcB9wH3Bc2rjjomH7ojZvjYYXAXcQdmM1Ao8BZ6R97gbCLoAGMp999G9p75cyxMHpqN1RhDOW6qPp3004FjGsehj4QHMyrf1m0g7iE34IP5/2nTwefZ9PEX7kN6e1vQDYGM3rU1l8x+s58MD0YsKxnybC2Ti3DfQdprWfT/hBvL3f8J9G67uZ8EfAhRk+vzRa/v7dEYRjVz+Nvu9NwD+z/+yjJGFLdjfh7KOPE7YsLMN81g8wj3+Lxl1NOGjeu7zzouFnEc7Kamb/mV4VQ61vdUN3Fn3BIiI5YWbnAte5+4IhG0vstPtIREaVmZWa2Xlmlox2o32BcJKDTADaUpAJITqQ/oeBxnm4IlvGCTMrI+wKO5pw3ON24KPu3hhrYZIVhYKIiPTR7iMREekz4W6yVVNT4wsXLoy7DBGRCeXxxx/f5e61Q7WbcKGwcOFC6urq4i5DRGRCMbMNQ7fK4e4jMzvEzO6xcB//VWb20QHamJl9x8zWmtkKMzs5V/WIiMjQcrml0A180t2fiG7I9biZ/dHD5fe9zgUWRd1pwLXRq4iIxCBnWwruvs2juxO6exOwhgNv9AXhCs8fe/AwUG1msxERkViMydlH0a1uTyLcMyfdXA68g+JmXh4cmNlVZlZnZnX19fW5KlNEJO/lPBTMrIJw982PjfTiFXe/3t2XuPuS2tohD56LiMgI5TQUojsY3gr8zN1/NUCTLRx4W915HHjbYBERGUO5PPvIgP8B1rj7NzM0Ww68NzoL6XRgn+9/epKIiIyxXJ599DeEx/M9Y2ZPRcM+R7idL+5+HeHWzucRnkvbSnjGbk7saWrjxS3bOX7hXEpLinI1GxGRCS1noeDuD3DgU6cGauPAh3JVQ7rvf+/rfL79G7x0yb0cevRJYzFLEZEJJ2/ufXT+qUcC0NmyL+ZKRETGr7wJhcLS8EzvztammCsRERm/8iYUisoqAehs0y3dRUQyyZtQKC4Lz2ZPtWtLQUQkk7wJhdKKEAo9CgURkYzyJhTKolDwjuaYKxERGb/yJhRKysMxBYWCiEhmeRMKliig1YuxToWCiEgmeRMKAK1WSqKrJe4yRETGrbwKhXYrJdGtUBARySSvQqEjUUZhd2vcZYiIjFt5FQqdBaUkexQKIiKZ5FUodBWUUaxQEBHJKK9CoTtZTnFKoSAikklehUJPspwSb4+7DBGRcSuvQsGLyijztrjLEBEZt/IqFFKFFZTRTk9PKu5SRETGpVw+o/kGM9tpZiszjJ9iZr8zs6fNbJWZ5exRnH3zLK4kYU5ri26fLSIykFxuKSwDzhlk/IeA1e5+ArAU+IaZ5fThyVZcDkBbs0JBRGQgOQsFd78f2DNYE6DSzAyoiNp256oegIKS8PS1Nj2SU0RkQMkY530NsBzYClQC73T3nO7sT5ZUANChUBARGVCcB5rfCDwFzAFOBK4xs6qBGprZVWZWZ2Z19fX1I55hsixMvkPPaRYRGVCcofB+4FcerAVeAo4eqKG7X+/uS9x9SW1t7YhnWBw9p/nmv6we8TRERCazOENhI3AWgJnNBI4C1uVyhiUV0wC44NjKXM5GRGTCytkxBTO7iXBWUY2ZbQa+ABQCuPt1wL8Cy8zsGcCAz7j7rlzVA1BWFUKhp6Uhl7MREZmwchYK7n7pEOO3Amfnav4DqZgyHYBUuw40i4gMJK+uaC4qKaPTk6BQEBEZUF6FAmY0WzkFHQoFEZGB5FcoAC2JCgq6dEqqiMhA8i4U2hMVFHXpNhciIgPJu1DoSFZQ3NMcdxkiIuNS3oVCV2EVpQoFEZEB5V0odBdVUe4KBRGRgeRdKHhxFZXeirvHXYqIyLiTd6FAyRSKrYuW1pa4KxERGXfyLhQSpdUANDfsjrkSEZHxJ+9CoaA8hEJr02DP/xERyU95FwpFZVMBaGtUKIiI9Jd3oVBcGUKho3lvzJWIiIw/eRcKpVXhTqldLQoFEZH+8i4UynufqdCqZyqIiPSXd6HQ90yFtffEXImIyPiTd6GQLCmnjSJs6vy4SxERGXfyLhQAGq2KZLvOPhIR6S9noWBmN5jZTjNbOUibpWb2lJmtMrP7clVLfy0FVRR26piCiEh/udxSWAack2mkmVUD3wfOd/fjgHfksJYDtCWrKe1SKIiI9JezUHD3+4HB9tG8C/iVu2+M2u/MVS39dRZNpTylB+2IiPQX5zGFI4GpZnavmT1uZu/N1NDMrjKzOjOrq6+vP+gZ95RMpUqhICLyMnGGQhJ4JfAm4I3A/zOzIwdq6O7Xu/sSd19SW1t70DP20mlU0Upbe8dBT0tEZDKJMxQ2A3e6e4u77wLuB04YixknyqeRMKdhz5jtsRIRmRDiDIXfAmeYWdLMyoDTgDVjMeNkZdjaaNqrUBARSZfM1YTN7CZgKVBjZpuBLwCFAO5+nbuvMbM7gBVACvihu2c8fXU0FVfWANDWoFAQEUmXs1Bw90uzaPN14Ou5qiGT8qkzAGjfp1AQEUmXl1c0V1SHUOhu1tPXRETS5WUoVE6bCUCqRaEgIpIuL0MhWVJBhxeyftOmuEsRERlX8jIUMGNfooojytvjrkREZFzJz1AAmpLTKO7QnVJFRNLlbSi0FU2jslvHFERE0uVtKHSV1FDVo+c0i4iky9tQSJXNYBqNtHd2xV2KiMi4kbehYJUzKLQedtfviLsUEZFxI29DoWhKuFahcdfWmCsRERk/8jYUSqfOBqBlz5aYKxERGT/yNhSqauYC0NGg3UciIr3yNhSm1M4DoKdJoSAi0itvQ6GoYhpdFECz7pQqItIrb0MBMxqsmmTbwT/zWURkssjfUAB2+hS6G7WlICLSK69DgYqZzE7oqmYRkV55HQqdZbOYltpDKuVxlyIiMi7kLBTM7AYz22lmgz532cxOMbNuM3t7rmrJqHIW062RPY1NYz5rEZHxKJdbCsuAcwZrYGYFwNeAu3JYR0bJ6nCtwu7tG+OYvYjIuJOzUHD3+4GhHljwf4FbgViO9pbVHAJA406FgogIxHhMwczmAm8Frs2i7VVmVmdmdfX1o3cKafWM+QC07d48atMUEZnI4jzQ/C3gM+6eGqqhu1/v7kvcfUltbe2oFVA9ayEAPft0/yMREYBkjPNeAtxsZgA1wHlm1u3uvxmrAgrKptJOEda0baxmKSIyrsUWCu5+aG+/mS0DbhvLQIhmzN7EdIradAGbiAhkEQpmdjiw2d07zGwpsBj4sbs3DPG5m4ClQI2ZbQa+ABQCuPt1B1n3qGkqqqWiQ6EgIgLZbSncCiwxsyOA64HfAj8HzhvsQ+5+abZFuPvl2bYdbR2lM6luW4G7E+3KEhHJW9kcaE65ezfhTKHvuvs/ALNzW9bYSVXNZSa72dfaEXcpIiKxyyYUuszsUuB9wG3RsMLclTS2ktPmU2zdbN+yIe5SRERil00ovB94FfBld3/JzA4FfpLbssZO+YxwvLth27qYKxERid+QxxTcfTXwEQAzmwpUuvvXcl3YWJk65wgA2urXx1uIiMg4MOSWgpnda2ZVZjYNeAL4gZl9M/eljY2qWWFLoWevdh+JiGSz+2iKuzcCFxFORT0NeH1uyxo7VlxJo1WSbNJVzSIi2YRC0sxmAxez/0DzpLK3cCblrQoFEZFsQuFLwJ3Ai+7+mJkdBryQ27LGVkvpHKZ174i7DBGR2A0ZCu7+C3df7O4fjN6vc/e35b60sbOyuYpZXs++1s64SxERiVU2B5rnmdmvo6eo7TSzW81s3lgUN1Zecfxiyq2DLVs2xV2KiEisstl9dCOwHJgTdb+Lhk0aFXOOBGDPpmdjrkREJF7ZhEKtu9/o7t1RtwwYvYcajAM1hxwFQOuOtTFXIiISr2xCYbeZXWZmBVF3GbA714WNpdIZh5PCYI+uahaR/JZNKPwd4XTU7cA24O3A5Tmsaewli9lVUEtJky5gE5H8ls3ZRxvc/Xx3r3X3Ge5+ITCpzj4C2FdyCNUdulZBRPLbSJ/R/IlRrWIc6KxayNzUNlo6uuMuRUQkNiMNhUn3NJq/7qlkujWxYaue1ywi+WukoeCjWsU48KbSVQDUb1gTcyUiIvHJGApm1mRmjQN0TYTrFQZlZjdEF7utzDD+3Wa2wsyeMbMHzeyEg1iOg1Z7yXcAaNmiUBCR/JUxFNy90t2rBugq3T2bZzsvA84ZZPxLwN+6+yuAfyU8/zk2RTVH0EMC2z2pbuskIjIs2fy4j4i7329mCwcZ/2Da24eBeG+dkSyiPjmHiiZdqyAi+WukxxRG2xXAHzKNNLOrzKzOzOrq6+tzVkRjxaHM6NxIT2rSHTIREclK7KFgZmcSQuEzmdq4+/XuvsTdl9TW5u4OG6lpi1jINjbvbsrZPERExrNYQ8HMFgM/BC5w99hvnVEy52iKrZt//tHv4y5FRCQW2dw6e6CzkDZFt9M+bKQzNrP5wK+A97j78yOdzmiqWfgKAC7u/l3MlYiIxCObA83fAjYDPydctHYJcDjwBHADsHSgD5nZTdG4GjPbDHwBKARw9+uAfwamA983M4Bud18y8kU5eBVzjwWgp2J2nGWIiMQmm1A4393TryG43syecvfPmNnnMn3I3S8dbKLufiVwZZZ1jo3SanYX1FKxb1xsuIiIjLlsjim0mtnFZpaIuouB9mjcpDtNp6FyEXM61tHZnYq7FBGRMZdNKLwbeA+wM+reA1xmZqXAh3NYWyxStcdymG3lxe174y5FRGTMDbn7yN3XAW/JMPqB0S0nfhXzF1P0Qg9bX3yGY+YtjbscEZExlc3ZR/OiM412Rt2tZhbv1cc5VHP4SQA0bng65kpERMZeNruPbgSWE26CNwf4XTRsUiqccTRdFJBYd3fcpYiIjLlsQqHW3W909+6oWwbk7rLiuCWLqC89nBr24j7pjqOLiAwqm1DYbWaXmVlB1F0GxH71cS61TT+eo30dG3a1xF2KiMiYyiYU/g64GNgObAPeDlyew5piV7rgZKZbE2vXPht3KSIiY2rIUHD3De5+vrvXuvsMd78QeNsY1Bab2kWnAtCwri7mSkRExtZIb4j3iVGtYpwpnLs4PHBn61NxlyIiMqZGGgo2qlWMN4Wl1Jcexozm1XT16MpmEckfIw2FSX9aTsfMk1nMC6zZ2hB3KSIiYyZjKGS4ZXajmTURrleY1KoWvYop1sqLa7QLSUTyR8ZQcPdKd68aoKt095w923m8qF70agBa1j0ccyUiImMn9sdxjldWcyStiXLKdz6pi9hEJG8oFDJJJNhrUzm2ezUb97TGXY2IyJhQKAyiZMm7OSqxmSeeXRt3KSIiY0KhMIhpx54JwN7V98VciYjI2MhZKJjZDdGttldmGG9m9h0zW2tmK8zs5FzVMlI292TaKSKx8a86riAieSGXWwrLgHMGGX8usCjqrgKuzWEtI5MsZt/0EznF1vDs9qa4qxERybmchYK73w/sGaTJBcCPPXgYqDaz2bmqZ6TKjzqT4xIbePiZNXGXIiKSc3EeU5gLbEp7vzka9jJmdpWZ1ZlZXX19/ZgU16vi+HMBaF5155jOV0QkDhPiQLO7X+/uS9x9SW3tGD/fZ9YJ7GEKC/Y8yL7WrrGdt4jIGIszFLYAh6S9nxcNG18SCfzws3hN4hnue3573NWIiORUnKGwHHhvdBbS6cA+d98WYz0ZTW1YxVRr5qUndWqqiExuuTwl9SbgIeAoM9tsZleY2dVmdnXU5PfAOmAt8APg73NVy8FKXHEHKRKUbryXnpROTRWRyStnN7Zz90uHGO/Ah3I1/1FVNo01iUWc2v04T2zcyykLp8VdkYhITkyIA83jwRFnXMRie4k/P7Yq7lJERHJGoZCl4mPfRMKcntXL9TQ2EZm0FArZmnk8zZWH8bruB3jghV1xVyMikhMKhWyZUXLSxZxWsIZ7Hns67mpERHJCoTAMyVe8jQROyXO/prWzO+5yRERGnUJhOGqPpGXqsZyTeIS7Vu2IuxoRkVGnUBim0pMv5uTEWv744KNxlyIiMuoUCsOUOP4iABZu/T1rtjXGXI2IyOhSKAzX1AV0zT+DdyXv5icProu7GhGRUaVQGIHC065kru1i71O3686pIjKpKBRG4ug305Uo5h3cxS8e3zR0exGRCUKhMBIFhRSe8RGWJp7m53f8hc5uXeEsIpODQmGkXnk5ljDebn/S1oKITBoKhZGaMg9KpvKegj/yn8vr6OjuibsiEZGDplA4CHbZL6i0Nt7JXdxStznuckREDppC4WDMfSVeUs0HC2/jhrtX0t6lrQURmdgUCgfJ3vW/TKGZM1v+wHX3vRh3OSIiByWnoWBm55jZc2a21sw+O8D4+WZ2j5k9aWYrzOy8XNaTE/NPh4Wv4aMlv+fGe1ezaU9r3BWJiIxYLp/RXAB8DzgXOBa41MyO7dfs88At7n4ScAnw/VzVk1Nn/hNTenZzReJ2/u321XFXIyIyYrncUjgVWOvu69y9E7gZuKBfGweqov4pwNYc1pM7C14Fx17IB5PLeWrVGv68RndQFZGJKZehMBdIP4F/czQs3ReBy8xsM/B74P/msJ7cesO/kDTny5W38plbV7CruSPuikREhi3uA82XAsvcfR5wHvATM3tZTWZ2lZnVmVldfX39mBeZlakLsVf9Pa/vuof5rSt5/Tfuw93jrkpEZFhyGQpbgEPS3s+LhqW7ArgFwN0fAkqAmv4Tcvfr3X2Juy+pra3NUbmj4DWfhKp53FC9jLa2Fn768Ia4KxIRGZZchsJjwCIzO9TMiggHkpf3a7MROAvAzI4hhMI43RTIQnElXHAN1a3r+XbpD/jSbat5bP2euKsSEclazkLB3buBDwN3AmsIZxmtMrMvmdn5UbNPAh8ws6eBm4DLfaLvczn8TDjlSt7oD3KaPcul1z/Mloa2uKsSEcmKTbTf4CVLlnhdXV3cZQyuoxm+fjjdKXh9z3conTaHm686nSmlhXFXJiJ5yswed/clQ7WL+0Dz5FRcAVf+iWTC+M3MH7J+517ef+OjtHR0x12ZiMigFAq5MusV8JZvU73zUf5wzJ94evM+rvxRHa2dCgYRGb8UCrl0wjvhtKtZuPZH/PrkFTzy0m7e9YNH2NPSGXdlIiIDUijk2hu/AqXTWLzy3/nVa3ewelsjb7/2QTbu1j2SRGT8USjkWqIAPrEaiqs48ZFPcPvZjexu6eQt1zzA/c9P3LNvRWRyUiiMhcJS+NgKmHMSi+79e/509i5mTynhfTc+ynf//AI9qYl1BpiITF4KhbFSOhXe+1uYdyq1d32I5ac/z1sWz+Ebf3yed/73Q9qdJCLjgkJhLJVUwWW3whGvp+iOT/LtabfyrYsX89yOJt74rfv53j1r9fQ2EYmVQmGsFZXBJTfBKVdiD32XC5/7NHdevZiSwgRfv/M5Xv/N+7hj5TbdTE9EYqFQiENBEs77Tzjna/DCXcy5+WyevGI6P7/yNMqLklz90yd427UP8sALuxQOIjKmdJuLuG16DJa9CXo64YyP033Gp7jl6d18cfkqOntSvHLBVK567WG84ZiZJBIWd7UiMkFle5sLhcJ40LoHvncatOyEqYfCm/+LjgWv5X8f28SXb19DR3eKQ2vKueKMQ7ngxDlUlugeSiIyPAqFiWjdfXDbx2HPi7D4nXD2v9FdWsMdq7bzmV+uoKWzh+JkgrOPm8VFJ8/lNUfUkCzQHkARGZpCYaLqaoe/fAPu/zqYwd98FF79Ebx0Kk9uauDXT2zhpkc30p1ykgnj/BPm8IZjZ/LaI2spL07GXb2IjFMKhYlu11q476vwzC/ACuCMj8OrPgRl0+jsTnHPczu5c+V2lj+9le6UU5RM8OrDp/Pqw6dz6qHTOW5OFYXaihCRiEJhstj5bDgQ3boLiirhxHfBKVdA7VEAdPekqNuwlz+u3sE9z+5k3a4WABIGpx82nRMOqebEqJtZVRLnkohIjBQKk82OVfDAt8KWAw4LXwMnvw+OPg+Kyvua7Wxq59GX9vDoS3t4cmMDK7fso3cNz6wq5qhZVRxRW8GimRUsmlHBohmVTCnTgWuRyU6hMFk118OTP4HHb4SGjWAJOP7tsPhiOOzMcA1EmvauHlZtbeTpTQ08s2UfL+xsYu3OZtq7Un1taiqKWDC9nAXTysLr9DIWTC9j7tRSasqLdSqsyCQwLkLBzM4Bvg0UAD90968O0OZi4IuAA0+7+7sGm2beh0KvVAo2PgTP3AJP/hRS3VBWA8dfBEedC/NfDYUD7y5KpZwtDW19AfHizhY27Glhw+5Wtu1rP6BtMmHUVhYzs6qEWVUlzKwqZuaU0D+rqoSaymKqSwupKi2kpLBgLJZcREYg9lAwswLgeeANwGbgMeBSd1+d1mYRcAvwOnffa2Yz3H3nYNNVKAyguwPW/glW3AJrloOnwhbEYWfCEWfB4WeFYxA29F/87V09bN7byvpdrWzb18b2xna27+tgR2M72xvb2dHYTlP7wE+PKylMUF1axJTSQqaUFTLoajaGAAAN0ElEQVSltJDq0kKqo/4pZUV9w8qLk5QUJigtLKC0qIDSwgJKCgsoTiawLOoUkeHJNhRyeQ7jqcBad18XFXQzcAGwOq3NB4DvuftegKECQTJIFsPRbwpdZwus/yu8+GdY+2e483OhTeUcOOQUmLsE5p0Cs08I92Hqp6SwgCNmVHLEjMqMs2vp6O4LiV3Nnexr66KxrYuG1tDf0NrFvrYuNu1p5b76Fjp7UhmnNZAQECEwStICo++1qICSZOKAMAnjw7CStPbFyQRFyQSFBQmKo9eitNei6LVAu8hEgNyGwlxgU9r7zcBp/docCWBmfyXsYvqiu9/Rf0JmdhVwFcD8+fNzUuykUVQOR54dOgjHHV68G166HzbXwerf7m87azHMWwJzXwkzj4faozPuckpXXpzksNoKDqutyLqsju6etPDooqWzh/au0LV19tDW1UN7Vyp6DcPau3r2v+/qobWzmyc27qWtqwccRnsbN2FgZkwtK6QgYSQs6hJQ0NdvJIy+cQW976P2BVH73nFmRkFv+6jt/uGZP7v/89G8++oZ5POJweuy6LMH1GLRtDK0NwADI+094XvqfW9Ro94NPOsdH42z6FN949On1/eZl09vf9sspmeWVlu/evt9pv/0euePvXx8/+nR/zNZSv9u9g+zAYYdOC4OcV/tlAQWAUuBecD9ZvYKd29Ib+Tu1wPXQ9h9NNZFTmjV8+GVl4cOwoHqLXUhILbUwTO/hLobwjgrgJojYdbxISRmHAM1i6B6QXiC3EEoThYwo7KAGZWjf1psKuV0dKcOCJC2vtBJ0dWTorMnRWd31B+9dnSn6Orxvve9wzp7UqRSTk/KSTmk3El5eO9ONHz/sP5tUh5OFU650+Pg6e2iz/Z4mNbWhjY6e1IUJhI4TnfP/n/e6f/QExbeT7DzQmSUzZ5SwkP/eFZO55HLUNgCHJL2fl40LN1m4BF37wJeMrPnCSHxWA7rym8VteFA9FHnhvepFOxZBzuege0rYcdK2PBQdOprpKAIph0WAmL6ovBac2QYVjo1q2MVuZRIWNiVVJQ/B7o9CpWeKIxSqfT+EEAhxDwanhZIWYRdb/veIPJo08z75h+GufeGVRjj0X/6xkUf6G2zP9i837gDp0f6NIeYXu/89rcdeHqkzb/vswd85sD5ZZreSNZV77T6hqXNe/+wA9sdMKto4JKF04ZfwDDlMhQeAxaZ2aGEMLgE6H9m0W+AS4EbzayGsDtpXQ5rkv4SCag5InTHvXX/8NY9sOt52PUC7H4hvO58Fp77QzjTqVdRZdgambogbFFMXQBVc6FqTujKZ7zsNFk5eL27bxLD2IUhko2c/d/q7t1m9mHgTsLxghvcfZWZfQmoc/fl0bizzWw10AP8g7vvzlVNMgxl02D+6aFL19MFezeEwNi7Hho2hPd714cb+nW1HNjeElAxC6pmQ+XsKDCi18rZITgqZw940FtExp4uXpPR4x62MBq3QONWaNoKjdvS+qP3Hfte/tmiCiivhYoZ4TW9v2JG2OIorw27v4qrYt9lJTLRjIdTUiXfmEH59NDNXpy5XUczNG2LwmNb6G+ph+ad4ZkSu18MF+a17mHAc4wSheFYRtm08Fo6DcqmpvVPC699baJhyeKcLbrIZKFQkLFXXAHF0QHrwfR0Q+vuEBTNO/cHR9ueEBhte0O3dz1sfSIM6+nIPL1kCZRMGUZXfeB7hYrkAYWCjF8FSaicGbpsdbaG0GjbGwVHWn/7vgO71j2w56X971Ndg087WRJ2XRVXQklVWv+U8PqycVVRf2W4fqSoInTJooP7XkRySKEgk0tRWeimzBve59yhq+3lwdG+D9ob9vd3NEJHE7RHry31+/s7GsnqkrqCogNDoqg8dH3h0W9ccXq7ioHbHuR1JCK9FAoiEI6H9AZK1eyRTSOVCmdfpYdER2N439kSdc1R1xKOrfT2dzaHXWWdzdHwFuhuy37eydLMAVJUEQ3vDZHKodsWlulgfp5SKIiMlkQi2o2U+b5Rw5LqSQuNlhA0g4ZLv7bt+8IZX+njejqznLn1C4u0rZPCsui1NPQXRmHa219Ymja+PBoX9fd+JqGnAo5XCgWR8SpRsP8g92jp7jxw66T3taN56C2ZzpZwoL+rDbpaQ9fZOrwtml7Jkn6BkhYa6QGTdfj0G1+gB0eNlEJBJJ8kiyAZnaI7WlKpEAydrfvDojcwutrCLrWuthAqXa1p/f3Cpas1HL9p2nbg+M4Whn37w0Thy0NksPDJOL584PBJFk/a3WsKBRE5OInE/l1MueAenhnSP0AGCp8Bg6hf+LTsThvfGvpTAz8jJCNLZLfFMtSutUzhlCyNbRebQkFExjezcEv3whIgRzeE6+nKvPXysq2bIcKnefvLx3e3D11Df8nStBCJAuWky+DUD4z+8qfPNqdTFxGZCAoKobQ6dLmQ6hl619kB4zPsgkuO/q3n+1MoiIjkWqJgdM9MyyGdFyYiIn0UCiIi0kehICIifRQKIiLSR6EgIiJ9FAoiItJHoSAiIn0UCiIi0sfch3mjqZiZWT2wYYQfrwF2jWI541U+LKeWcXLQMo6dBe5eO1SjCRcKB8PM6tx9Sdx15Fo+LKeWcXLQMo4/2n0kIiJ9FAoiItIn30Lh+rgLGCP5sJxaxslByzjO5NUxBRERGVy+bSmIiMggFAoiItInb0LBzM4xs+fMbK2ZfTbuekaLma03s2fM7Ckzq4uGTTOzP5rZC9Hr1LjrHC4zu8HMdprZyrRhAy6XBd+J1u0KMzs5vsqzl2EZv2hmW6L1+ZSZnZc27h+jZXzOzN4YT9XDY2aHmNk9ZrbazFaZ2Uej4ZNmXQ6yjBNzXbr7pO+AAuBF4DCgCHgaODbuukZp2dYDNf2G/Qfw2aj/s8DX4q5zBMv1WuBkYOVQywWcB/wBMOB04JG46z+IZfwi8KkB2h4b/bstBg6N/j0XxL0MWSzjbODkqL8SeD5alkmzLgdZxgm5LvNlS+FUYK27r3P3TuBm4IKYa8qlC4AfRf0/Ai6MsZYRcff7gT39BmdarguAH3vwMFBtZrPHptKRy7CMmVwA3OzuHe7+ErCW8O96XHP3be7+RNTfBKwB5jKJ1uUgy5jJuF6X+RIKc4FNae83M/hKm0gcuMvMHjezq6JhM919W9S/HZgZT2mjLtNyTbb1++Fo18kNabv+JvwymtlC4CTgESbpuuy3jDAB12W+hMJkdoa7nwycC3zIzF6bPtLD9uqkO+94si4XcC1wOHAisA34RrzljA4zqwBuBT7m7o3p4ybLuhxgGSfkusyXUNgCHJL2fl40bMJz9y3R607g14TN0B29m9zR6874KhxVmZZr0qxfd9/h7j3ungJ+wP7dChN2Gc2skPBj+TN3/1U0eFKty4GWcaKuy3wJhceARWZ2qJkVAZcAy2Ou6aCZWbmZVfb2A2cDKwnL9r6o2fuA38ZT4ajLtFzLgfdGZ66cDuxL2zUxofTbf/5WwvqEsIyXmFmxmR0KLAIeHev6hsvMDPgfYI27fzNt1KRZl5mWccKuy7iPdI9VRzir4XnCkf5/irueUVqmwwhnMTwNrOpdLmA68GfgBeBPwLS4ax3Bst1E2OTuIuxzvSLTchHOVPletG6fAZbEXf9BLONPomVYQfjxmJ3W/p+iZXwOODfu+rNcxjMIu4ZWAE9F3XmTaV0OsowTcl3qNhciItInX3YfiYhIFhQKIiLSR6EgIiJ9FAoiItJHoSAiIn0UCiIi0kehIJIFMzux362Pzx+tW7Cb2cfMrGw0piVysHSdgkgWzOxywoVUH87BtNdH0941jM8UuHvPaNcioi0FmVTMbKGZrTGzH0QPPLnLzEoztD3czO6I7jD7FzM7Ohr+DjNbaWZPm9n90a1RvgS8M3pYyjvN7HIzuyZqv8zMrjWzh81snZktje6KucbMlqXN71ozq4vq+pdo2EeAOcA9ZnZPNOxSCw9OWmlmX0v7fLOZfcPMngZeZWZfjR7sssLM/jM336jknbgvqVanbjQ7YCHQDZwYvb8FuCxD2z8Di6L+04C7o/5ngLlRf3X0ejlwTdpn+94DywjP6DDCvfIbgVcQ/uh6PK2W3ls5FAD3Aouj9+uJHpRECIiNQC2QBO4GLozGOXBx1D+dcIsES69TnbqD7bSlIJPRS+7+VNT/OCEoDhDd5vjVwC/M7CngvwlP0AL4K7DMzD5A+AHPxu/c3QmBssPdn/Fwd8xVafO/2MyeAJ4EjiM8gau/U4B73b3e3buBnxGe0AbQQ7gTJ8A+oB34HzO7CGjNsk6RQSXjLkAkBzrS+nuAgXYfJYAGdz+x/wh3v9rMTgPeBDxuZq8cxjxT/eafApLR3TA/BZzi7nuj3UolWUw3XbtHxxHcvdvMTgXOAt4OfBh43TCnJ/Iy2lKQvOThISgvmdk7oO+B8SdE/Ye7+yPu/s9APeHe902E5++OVBXQAuwzs5mEhyL1Sp/2o8DfmlmNmRUAlwL39Z9YtKUzxd1/D3wcOOEgahPpoy0FyWfvBq41s88DhYTjAk8DXzezRYRjBH+Ohm0EPhvtavr34c7I3Z82syeBZwmPYvxr2ujrgTvMbKu7nxmd6npPNP/b3X2g52FUAr81s5Ko3SeGW5PIQHRKqoiI9NHuIxER6aPdRzLpmdn3gL/pN/jb7n5jHPWIjGfafSQiIn20+0hERPooFEREpI9CQURE+igURESkz/8HIPaq7hyyO2AAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "cvresult = pd.DataFrame.from_csv('1_nestimators.csv')\n",
    "        \n",
    "# plot\n",
    "test_means = cvresult['test-mlogloss-mean']\n",
    "test_stds = cvresult['test-mlogloss-std'] \n",
    "        \n",
    "train_means = cvresult['train-mlogloss-mean']\n",
    "train_stds = cvresult['train-mlogloss-std'] \n",
    "\n",
    "x_axis = range(0, cvresult.shape[0])\n",
    "        \n",
    "pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "pyplot.xlabel( 'n_estimators' )\n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'n_estimators4_1.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/fei/.local/lib/python3.6/site-packages/ipykernel_launcher.py:1: FutureWarning: from_csv is deprecated. Please use read_csv(...) instead. Note that some of the default arguments are different, so please refer to the documentation for from_csv when changing your function calls\n",
      "  \"\"\"Entry point for launching an IPython kernel.\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1000x1000 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "cvresult = pd.DataFrame.from_csv('1_nestimators.csv')\n",
    "\n",
    "cvresult = cvresult.iloc[100:]\n",
    "# plot\n",
    "test_means = cvresult['test-mlogloss-mean']\n",
    "test_stds = cvresult['test-mlogloss-std'] \n",
    "        \n",
    "train_means = cvresult['train-mlogloss-mean']\n",
    "train_stds = cvresult['train-mlogloss-std'] \n",
    "\n",
    "x_axis = range(100,cvresult.shape[0]+100)\n",
    "        \n",
    "fig = pyplot.figure(figsize=(10, 10), dpi=100)\n",
    "pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "pyplot.xlabel( 'n_estimators' )\n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'n_estimators_detail.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>train-mlogloss-mean</th>\n",
       "      <th>train-mlogloss-std</th>\n",
       "      <th>test-mlogloss-mean</th>\n",
       "      <th>test-mlogloss-std</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>n_estimators</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>100</th>\n",
       "      <td>0.552891</td>\n",
       "      <td>0.000691</td>\n",
       "      <td>0.602069</td>\n",
       "      <td>0.002598</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>101</th>\n",
       "      <td>0.552316</td>\n",
       "      <td>0.000606</td>\n",
       "      <td>0.601783</td>\n",
       "      <td>0.002652</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>102</th>\n",
       "      <td>0.551496</td>\n",
       "      <td>0.000672</td>\n",
       "      <td>0.601336</td>\n",
       "      <td>0.002748</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>103</th>\n",
       "      <td>0.550899</td>\n",
       "      <td>0.000733</td>\n",
       "      <td>0.601158</td>\n",
       "      <td>0.002730</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>104</th>\n",
       "      <td>0.550286</td>\n",
       "      <td>0.000744</td>\n",
       "      <td>0.600931</td>\n",
       "      <td>0.002669</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>105</th>\n",
       "      <td>0.549614</td>\n",
       "      <td>0.000710</td>\n",
       "      <td>0.600624</td>\n",
       "      <td>0.002610</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>106</th>\n",
       "      <td>0.549061</td>\n",
       "      <td>0.000671</td>\n",
       "      <td>0.600438</td>\n",
       "      <td>0.002556</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>107</th>\n",
       "      <td>0.548497</td>\n",
       "      <td>0.000707</td>\n",
       "      <td>0.600187</td>\n",
       "      <td>0.002569</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>108</th>\n",
       "      <td>0.547956</td>\n",
       "      <td>0.000748</td>\n",
       "      <td>0.600103</td>\n",
       "      <td>0.002566</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>109</th>\n",
       "      <td>0.547341</td>\n",
       "      <td>0.000759</td>\n",
       "      <td>0.599914</td>\n",
       "      <td>0.002615</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>110</th>\n",
       "      <td>0.546745</td>\n",
       "      <td>0.000792</td>\n",
       "      <td>0.599632</td>\n",
       "      <td>0.002467</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>111</th>\n",
       "      <td>0.546093</td>\n",
       "      <td>0.000737</td>\n",
       "      <td>0.599461</td>\n",
       "      <td>0.002409</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>112</th>\n",
       "      <td>0.545503</td>\n",
       "      <td>0.000660</td>\n",
       "      <td>0.599170</td>\n",
       "      <td>0.002421</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>113</th>\n",
       "      <td>0.544981</td>\n",
       "      <td>0.000751</td>\n",
       "      <td>0.598928</td>\n",
       "      <td>0.002410</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>114</th>\n",
       "      <td>0.544492</td>\n",
       "      <td>0.000821</td>\n",
       "      <td>0.598768</td>\n",
       "      <td>0.002428</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>115</th>\n",
       "      <td>0.543922</td>\n",
       "      <td>0.000797</td>\n",
       "      <td>0.598554</td>\n",
       "      <td>0.002460</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>116</th>\n",
       "      <td>0.543282</td>\n",
       "      <td>0.000839</td>\n",
       "      <td>0.598332</td>\n",
       "      <td>0.002520</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>117</th>\n",
       "      <td>0.542673</td>\n",
       "      <td>0.000845</td>\n",
       "      <td>0.598064</td>\n",
       "      <td>0.002459</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>118</th>\n",
       "      <td>0.542164</td>\n",
       "      <td>0.000934</td>\n",
       "      <td>0.597904</td>\n",
       "      <td>0.002385</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>119</th>\n",
       "      <td>0.541625</td>\n",
       "      <td>0.000923</td>\n",
       "      <td>0.597731</td>\n",
       "      <td>0.002421</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>120</th>\n",
       "      <td>0.541140</td>\n",
       "      <td>0.000971</td>\n",
       "      <td>0.597508</td>\n",
       "      <td>0.002328</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>121</th>\n",
       "      <td>0.540659</td>\n",
       "      <td>0.000919</td>\n",
       "      <td>0.597317</td>\n",
       "      <td>0.002328</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>122</th>\n",
       "      <td>0.540117</td>\n",
       "      <td>0.000873</td>\n",
       "      <td>0.597219</td>\n",
       "      <td>0.002373</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>123</th>\n",
       "      <td>0.539706</td>\n",
       "      <td>0.000900</td>\n",
       "      <td>0.597145</td>\n",
       "      <td>0.002416</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>124</th>\n",
       "      <td>0.539115</td>\n",
       "      <td>0.000784</td>\n",
       "      <td>0.596993</td>\n",
       "      <td>0.002510</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>125</th>\n",
       "      <td>0.538505</td>\n",
       "      <td>0.000734</td>\n",
       "      <td>0.596878</td>\n",
       "      <td>0.002516</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>126</th>\n",
       "      <td>0.538066</td>\n",
       "      <td>0.000720</td>\n",
       "      <td>0.596755</td>\n",
       "      <td>0.002527</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>127</th>\n",
       "      <td>0.537514</td>\n",
       "      <td>0.000601</td>\n",
       "      <td>0.596519</td>\n",
       "      <td>0.002487</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>128</th>\n",
       "      <td>0.537049</td>\n",
       "      <td>0.000708</td>\n",
       "      <td>0.596323</td>\n",
       "      <td>0.002517</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>129</th>\n",
       "      <td>0.536608</td>\n",
       "      <td>0.000776</td>\n",
       "      <td>0.596222</td>\n",
       "      <td>0.002406</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>237</th>\n",
       "      <td>0.494338</td>\n",
       "      <td>0.000412</td>\n",
       "      <td>0.590878</td>\n",
       "      <td>0.002205</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>238</th>\n",
       "      <td>0.493947</td>\n",
       "      <td>0.000396</td>\n",
       "      <td>0.590867</td>\n",
       "      <td>0.002255</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>239</th>\n",
       "      <td>0.493650</td>\n",
       "      <td>0.000389</td>\n",
       "      <td>0.590826</td>\n",
       "      <td>0.002289</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>240</th>\n",
       "      <td>0.493278</td>\n",
       "      <td>0.000399</td>\n",
       "      <td>0.590810</td>\n",
       "      <td>0.002271</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>241</th>\n",
       "      <td>0.492961</td>\n",
       "      <td>0.000373</td>\n",
       "      <td>0.590887</td>\n",
       "      <td>0.002275</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>242</th>\n",
       "      <td>0.492624</td>\n",
       "      <td>0.000407</td>\n",
       "      <td>0.590889</td>\n",
       "      <td>0.002295</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>243</th>\n",
       "      <td>0.492238</td>\n",
       "      <td>0.000392</td>\n",
       "      <td>0.590905</td>\n",
       "      <td>0.002267</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>244</th>\n",
       "      <td>0.491941</td>\n",
       "      <td>0.000391</td>\n",
       "      <td>0.590774</td>\n",
       "      <td>0.002234</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>245</th>\n",
       "      <td>0.491612</td>\n",
       "      <td>0.000408</td>\n",
       "      <td>0.590841</td>\n",
       "      <td>0.002222</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>246</th>\n",
       "      <td>0.491257</td>\n",
       "      <td>0.000442</td>\n",
       "      <td>0.590790</td>\n",
       "      <td>0.002256</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>247</th>\n",
       "      <td>0.490887</td>\n",
       "      <td>0.000409</td>\n",
       "      <td>0.590769</td>\n",
       "      <td>0.002216</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>248</th>\n",
       "      <td>0.490558</td>\n",
       "      <td>0.000459</td>\n",
       "      <td>0.590784</td>\n",
       "      <td>0.002198</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249</th>\n",
       "      <td>0.490186</td>\n",
       "      <td>0.000377</td>\n",
       "      <td>0.590768</td>\n",
       "      <td>0.002228</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>250</th>\n",
       "      <td>0.489892</td>\n",
       "      <td>0.000356</td>\n",
       "      <td>0.590778</td>\n",
       "      <td>0.002289</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>251</th>\n",
       "      <td>0.489567</td>\n",
       "      <td>0.000350</td>\n",
       "      <td>0.590739</td>\n",
       "      <td>0.002261</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>252</th>\n",
       "      <td>0.489231</td>\n",
       "      <td>0.000378</td>\n",
       "      <td>0.590713</td>\n",
       "      <td>0.002221</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>253</th>\n",
       "      <td>0.488885</td>\n",
       "      <td>0.000372</td>\n",
       "      <td>0.590699</td>\n",
       "      <td>0.002173</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>254</th>\n",
       "      <td>0.488493</td>\n",
       "      <td>0.000392</td>\n",
       "      <td>0.590745</td>\n",
       "      <td>0.002183</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>255</th>\n",
       "      <td>0.488145</td>\n",
       "      <td>0.000390</td>\n",
       "      <td>0.590708</td>\n",
       "      <td>0.002172</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>256</th>\n",
       "      <td>0.487840</td>\n",
       "      <td>0.000417</td>\n",
       "      <td>0.590732</td>\n",
       "      <td>0.002099</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>257</th>\n",
       "      <td>0.487504</td>\n",
       "      <td>0.000451</td>\n",
       "      <td>0.590711</td>\n",
       "      <td>0.002087</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>258</th>\n",
       "      <td>0.487227</td>\n",
       "      <td>0.000357</td>\n",
       "      <td>0.590681</td>\n",
       "      <td>0.002117</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>259</th>\n",
       "      <td>0.486914</td>\n",
       "      <td>0.000417</td>\n",
       "      <td>0.590697</td>\n",
       "      <td>0.002044</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>260</th>\n",
       "      <td>0.486540</td>\n",
       "      <td>0.000376</td>\n",
       "      <td>0.590654</td>\n",
       "      <td>0.001971</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>261</th>\n",
       "      <td>0.486213</td>\n",
       "      <td>0.000449</td>\n",
       "      <td>0.590685</td>\n",
       "      <td>0.001903</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>262</th>\n",
       "      <td>0.485931</td>\n",
       "      <td>0.000360</td>\n",
       "      <td>0.590664</td>\n",
       "      <td>0.001984</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>263</th>\n",
       "      <td>0.485598</td>\n",
       "      <td>0.000326</td>\n",
       "      <td>0.590599</td>\n",
       "      <td>0.001973</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>264</th>\n",
       "      <td>0.485211</td>\n",
       "      <td>0.000325</td>\n",
       "      <td>0.590555</td>\n",
       "      <td>0.002055</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>265</th>\n",
       "      <td>0.484894</td>\n",
       "      <td>0.000300</td>\n",
       "      <td>0.590611</td>\n",
       "      <td>0.002091</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>266</th>\n",
       "      <td>0.484543</td>\n",
       "      <td>0.000298</td>\n",
       "      <td>0.590553</td>\n",
       "      <td>0.002114</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>167 rows × 4 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "              train-mlogloss-mean  train-mlogloss-std  test-mlogloss-mean  \\\n",
       "n_estimators                                                                \n",
       "100                      0.552891            0.000691            0.602069   \n",
       "101                      0.552316            0.000606            0.601783   \n",
       "102                      0.551496            0.000672            0.601336   \n",
       "103                      0.550899            0.000733            0.601158   \n",
       "104                      0.550286            0.000744            0.600931   \n",
       "105                      0.549614            0.000710            0.600624   \n",
       "106                      0.549061            0.000671            0.600438   \n",
       "107                      0.548497            0.000707            0.600187   \n",
       "108                      0.547956            0.000748            0.600103   \n",
       "109                      0.547341            0.000759            0.599914   \n",
       "110                      0.546745            0.000792            0.599632   \n",
       "111                      0.546093            0.000737            0.599461   \n",
       "112                      0.545503            0.000660            0.599170   \n",
       "113                      0.544981            0.000751            0.598928   \n",
       "114                      0.544492            0.000821            0.598768   \n",
       "115                      0.543922            0.000797            0.598554   \n",
       "116                      0.543282            0.000839            0.598332   \n",
       "117                      0.542673            0.000845            0.598064   \n",
       "118                      0.542164            0.000934            0.597904   \n",
       "119                      0.541625            0.000923            0.597731   \n",
       "120                      0.541140            0.000971            0.597508   \n",
       "121                      0.540659            0.000919            0.597317   \n",
       "122                      0.540117            0.000873            0.597219   \n",
       "123                      0.539706            0.000900            0.597145   \n",
       "124                      0.539115            0.000784            0.596993   \n",
       "125                      0.538505            0.000734            0.596878   \n",
       "126                      0.538066            0.000720            0.596755   \n",
       "127                      0.537514            0.000601            0.596519   \n",
       "128                      0.537049            0.000708            0.596323   \n",
       "129                      0.536608            0.000776            0.596222   \n",
       "...                           ...                 ...                 ...   \n",
       "237                      0.494338            0.000412            0.590878   \n",
       "238                      0.493947            0.000396            0.590867   \n",
       "239                      0.493650            0.000389            0.590826   \n",
       "240                      0.493278            0.000399            0.590810   \n",
       "241                      0.492961            0.000373            0.590887   \n",
       "242                      0.492624            0.000407            0.590889   \n",
       "243                      0.492238            0.000392            0.590905   \n",
       "244                      0.491941            0.000391            0.590774   \n",
       "245                      0.491612            0.000408            0.590841   \n",
       "246                      0.491257            0.000442            0.590790   \n",
       "247                      0.490887            0.000409            0.590769   \n",
       "248                      0.490558            0.000459            0.590784   \n",
       "249                      0.490186            0.000377            0.590768   \n",
       "250                      0.489892            0.000356            0.590778   \n",
       "251                      0.489567            0.000350            0.590739   \n",
       "252                      0.489231            0.000378            0.590713   \n",
       "253                      0.488885            0.000372            0.590699   \n",
       "254                      0.488493            0.000392            0.590745   \n",
       "255                      0.488145            0.000390            0.590708   \n",
       "256                      0.487840            0.000417            0.590732   \n",
       "257                      0.487504            0.000451            0.590711   \n",
       "258                      0.487227            0.000357            0.590681   \n",
       "259                      0.486914            0.000417            0.590697   \n",
       "260                      0.486540            0.000376            0.590654   \n",
       "261                      0.486213            0.000449            0.590685   \n",
       "262                      0.485931            0.000360            0.590664   \n",
       "263                      0.485598            0.000326            0.590599   \n",
       "264                      0.485211            0.000325            0.590555   \n",
       "265                      0.484894            0.000300            0.590611   \n",
       "266                      0.484543            0.000298            0.590553   \n",
       "\n",
       "              test-mlogloss-std  \n",
       "n_estimators                     \n",
       "100                    0.002598  \n",
       "101                    0.002652  \n",
       "102                    0.002748  \n",
       "103                    0.002730  \n",
       "104                    0.002669  \n",
       "105                    0.002610  \n",
       "106                    0.002556  \n",
       "107                    0.002569  \n",
       "108                    0.002566  \n",
       "109                    0.002615  \n",
       "110                    0.002467  \n",
       "111                    0.002409  \n",
       "112                    0.002421  \n",
       "113                    0.002410  \n",
       "114                    0.002428  \n",
       "115                    0.002460  \n",
       "116                    0.002520  \n",
       "117                    0.002459  \n",
       "118                    0.002385  \n",
       "119                    0.002421  \n",
       "120                    0.002328  \n",
       "121                    0.002328  \n",
       "122                    0.002373  \n",
       "123                    0.002416  \n",
       "124                    0.002510  \n",
       "125                    0.002516  \n",
       "126                    0.002527  \n",
       "127                    0.002487  \n",
       "128                    0.002517  \n",
       "129                    0.002406  \n",
       "...                         ...  \n",
       "237                    0.002205  \n",
       "238                    0.002255  \n",
       "239                    0.002289  \n",
       "240                    0.002271  \n",
       "241                    0.002275  \n",
       "242                    0.002295  \n",
       "243                    0.002267  \n",
       "244                    0.002234  \n",
       "245                    0.002222  \n",
       "246                    0.002256  \n",
       "247                    0.002216  \n",
       "248                    0.002198  \n",
       "249                    0.002228  \n",
       "250                    0.002289  \n",
       "251                    0.002261  \n",
       "252                    0.002221  \n",
       "253                    0.002173  \n",
       "254                    0.002183  \n",
       "255                    0.002172  \n",
       "256                    0.002099  \n",
       "257                    0.002087  \n",
       "258                    0.002117  \n",
       "259                    0.002044  \n",
       "260                    0.001971  \n",
       "261                    0.001903  \n",
       "262                    0.001984  \n",
       "263                    0.001973  \n",
       "264                    0.002055  \n",
       "265                    0.002091  \n",
       "266                    0.002114  \n",
       "\n",
       "[167 rows x 4 columns]"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cvresult"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "n_estimators\n",
       "100    0.602069\n",
       "101    0.601783\n",
       "102    0.601336\n",
       "103    0.601158\n",
       "104    0.600931\n",
       "105    0.600624\n",
       "106    0.600438\n",
       "107    0.600187\n",
       "108    0.600103\n",
       "109    0.599914\n",
       "110    0.599632\n",
       "111    0.599461\n",
       "112    0.599170\n",
       "113    0.598928\n",
       "114    0.598768\n",
       "115    0.598554\n",
       "116    0.598332\n",
       "117    0.598064\n",
       "118    0.597904\n",
       "119    0.597731\n",
       "120    0.597508\n",
       "121    0.597317\n",
       "122    0.597219\n",
       "123    0.597145\n",
       "124    0.596993\n",
       "125    0.596878\n",
       "126    0.596755\n",
       "127    0.596519\n",
       "128    0.596323\n",
       "129    0.596222\n",
       "         ...   \n",
       "237    0.590878\n",
       "238    0.590867\n",
       "239    0.590826\n",
       "240    0.590810\n",
       "241    0.590887\n",
       "242    0.590889\n",
       "243    0.590905\n",
       "244    0.590774\n",
       "245    0.590841\n",
       "246    0.590790\n",
       "247    0.590769\n",
       "248    0.590784\n",
       "249    0.590768\n",
       "250    0.590778\n",
       "251    0.590739\n",
       "252    0.590713\n",
       "253    0.590699\n",
       "254    0.590745\n",
       "255    0.590708\n",
       "256    0.590732\n",
       "257    0.590711\n",
       "258    0.590681\n",
       "259    0.590697\n",
       "260    0.590654\n",
       "261    0.590685\n",
       "262    0.590664\n",
       "263    0.590599\n",
       "264    0.590555\n",
       "265    0.590611\n",
       "266    0.590553\n",
       "Name: test-mlogloss-mean, Length: 167, dtype: float64"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_means"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.5103640845129418"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_predprob = xgb1.predict_proba(X_train)\n",
    "logloss = log_loss(y_train, train_predprob)\n",
    "logloss"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "267"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb1.n_estimators"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "最佳值 n_estimate=267"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
